package leecode

func countAlternatingSubarrays(nums []int) int64 {
	n := len(nums)
	result := 0

	// 遍历数组，以每个元素作为起点，计算交替子数组数量
	for i := 0; i < n; i++ {
		windowStart := i
		windowEnd := i

		// 循环直到窗口内的元素不满足交替条件
		for windowEnd < n-1 && nums[windowEnd] != nums[windowEnd+1] {
			windowEnd++
		}

		// 计算窗口内的交替子数组数量
		/*
			[1,0,1]
			对于长度为 1 的子数组，数量为 (1 * (1 + 1)) / 2 = 1。
			对于长度为 2 的子数组，数量为 (2 * (2 + 1)) / 2 = 3。
			对于长度为 3 的子数组，数量为 (3 * (3 + 1)) / 2 = 6。
		*/
		windowSize := windowEnd - windowStart + 1
		result += (windowSize * (windowSize + 1)) / 2

		// 移动窗口起点到窗口终点的下一个位置
		i = windowEnd
	}

	return int64(result)
}
